/**
  * Author: Mei
  * Date: 2020-12-13 15:11
  * Description: deque、queue、stack
  */
#include "../../head.h"

using namespace std;

int main() {
    /**
     * Deque 双向队列 分段(buffer(8的大小)连续  使用vector连接
     *          vector中存放指针 每个指针指向buffer
     *
     *  每次++或--都要判断是否到达buffer的边界
     *
     *  deque如何模拟连续的空间 其实都是deque中iterator的功劳
     *
     *  由于deque是包含了queue和stack的全部功能  双向队列
     *  而queue是先进先出 只是控制了deque的某些功能  所以queue可以取deque来支持
     *  template<typename _Tp, typename _Sequence = deque<_Tp> >
             class queue
     *  同理stack也是同样  只是稍微改装了deque
     *
     *  但是queue和stack都不允许有iterator 拿数据只能从头部和尾部
     *  stack可以选择vector和list做支撑  但queue不能选vector做支撑
     *
     *  stack和queue都不可选择set或map做支撑
     *
     * 还可以选择list做支撑
     */
    deque<int> de;
    cout << sizeof(de) << endl; //80 8 16

    queue<int> qu;
    qu.pop(); //底层调用c.pop_front();

    vector<int> vec; //vector只有vec.pop_back();方法
    //vec.pop_back();

    list<int> li;
    li.pop_front();

    return 0;
}